Think Fast: A Tensor Streaming Processor (TSP) for Accelerating Deep Learning Workloads
https://scrapbox.io/files/6627004f17b9f80026a487dd.png
論文情報
タイトル:Think Fast: A Tensor Streaming Processor (TSP) for Accelerating Deep Learning Workloads
発行日:2020年6月
著者:Dennis Abts etal
所属:Groq
論文のポイント
Groqの2020年に発表し受賞した論文
TSPは、人工知能の計算を高速に行うために特別に設計されたプロセッサ。
TSPは、データを保存するメモリとデータを処理する計算ユニットを上手に配置することで、効率的に動作する。
TSPは、人工知能の計算によく出てくる、たくさんのデータを同時に処理する方法に適している。シンプルで予測可能な設計により、高速で電力効率も良い。
TSPは、人工知能の計算に含まれるさまざまな種類の並列処理を活用するように設計されている。
TSPは、予期せぬ動作を引き起こす可能性のある複雑な要素を取り除くことで、常に予測通りに動作することを保証している。
TSPは、最新の製造技術を使って作られており、非常に小さいサイズで高い計算能力を発揮する。
TSPは、画像認識のテストにおいて、一度に1枚の画像を処理する場合、1秒間に20,400枚以上の画像を処理できる。これは、他の同様のプロセッサと比べて4倍も速い。
テンソルストリーミングプロセッサ(TSP)は、人工知能の計算を高速に行うための新しいコンピュータの仕組み。
普通のコンピュータは、CPUという計算を行う部品とメモリという情報を保存する部品が別々になっている。でも、TSPは、計算とメモリを一体化させることで、より効率的に動くようになっている。
TSPは、たくさんの計算ユニットを持っていて、それらが協力して並列に計算を行いる。
また、TSPは、ストリームという仕組みを使って、データを効率的に各計算ユニットに送る。ストリームは、データの流れのようなもので、あたかもデータが計算ユニットの間を流れていくように見える。
TSPは、プログラムを実行する際に、命令をきちんとスケジュールすることで、ハードウェアを効率的に使うようにしている。難しい制御は、コンパイラと呼ばれるプログラムが行ってくれるので、ハードウェア自体はシンプルになっている。
https://scrapbox.io/files/6627063f55cb270025b64611.png
Figure1は、従来のチップマルチプロセッサ(CMP)の構成と、TSPの機能的にスライス化された構成の違いを説明している。
図1(a)は従来のCMPの構成を示している。
各 "タイル" は独立したコアであり、オンチップネットワークを介してデータをやり取りする。
各コアは命令フェッチ(IF)、命令デコード(ID)、実行(EX)、メモリアクセス(MEM)、レジスタへの書き戻し(WB)という一連の処理を行なう。
一方、図1(b)はTSPの構成を示している。
TSPでは、従来のCMPのタイルを機能ごとに分割し、縦方向に並べている。
具体的には、命令制御(ICU)、メモリ(MEM)、整数演算(INT)、浮動小数点演算(FPU)、ネットワークインターフェイス(NET)の各機能ブロックが、独立したタイルとして存在する。
つまり、従来のCMPが同じ構成のコアを2次元に並べているのに対し、TSPでは機能ごとにタイルを分割し、それらを縦に積み上げることで、データの流れに適した構成を実現している。これにより、データの局所性を活かし、効率的な処理が可能になる。
https://scrapbox.io/files/662707b618e9e200256d1674.png
Figure 2は、TSPの1つの行(row)におけるデータの流れと各機能ブロックの配置を示している。
データは、メモリ(MEM)ブロックから読み出された後、左右(東西)方向に流れます。各機能ブロック(MEM, VXM, MXM, SXM)は、データが通過する際に、必要な処理を行なう。
一方、命令は、ICUから各機能ブロックに向けて上(北)方向に流れる。各機能ブロックは、命令を受け取ると、それに従ってデータの処理を行なう。
つまり、TSPでは、データは横方向に、命令は縦方向に流れるという特徴があります。これにより、データの流れに沿った効率的な処理が可能になる。
また、図中では、MEM, ICU, VXM, MXM, SXMという機能ブロックが示されている。MEMはメモリ、ICUは命令制御、VXMはベクトル演算、MXMは行列演算、SXMはデータの入れ替えや転置を行うブロック。これらの機能ブロックが協調して動作することで、TSPは高速かつ効率的な人工知能の計算を実現している。
https://scrapbox.io/files/66270a397d4323002870fa72.png
Figure 3は、従来のRISCプロセッサとTSPのデータ処理の違いを説明しています。
左側は従来のRISCプロセッサの処理方法を示している。
RISCプロセッサでは、データはメモリから読み出された後、レジスタ(R1, R2, R3)に格納される。
そして、レジスタに格納されたデータを使って演算が行われ、結果が再びレジスタ(R3)に格納される。
最後に、レジスタの内容がメモリに書き戻される。
このように、RISCプロセッサでは、データはメモリとレジスタの間を行き来しながら処理される。
一方、右側はTSPの処理方法を示している。
TSPでは、データはメモリからストリームという形で読み出される。
ストリームは、複数のデータを連続的に流すことができる。
各機能ブロックは、ストリームからデータを受け取り、処理を行い、結果を別のストリームに流す。
このように、TSPでは、データはストリームを通じて各機能ブロック間を流れながら処理される。
💡Redux Obseravableみたい
ストリームから、Actionを受け取り、新たなActionを発行する
つまり、RISCプロセッサがメモリとレジスタの間でデータをやり取りするのに対し、TSPではストリームを介してデータを流し続けるという違いがある。
この違いにより、TSPではメモリアクセスのオーバーヘッドが減り、効率的な処理が可能になる。
また、ストリームを使うことで、複数のデータを連続的に処理することができ、並列性を活かすことができる。
https://scrapbox.io/files/66270d84ea5b520024e737a5.png
Figure 4は、TSPにおけるストリームレジスタの配置と、データの流れを説明している。
図の上部には、各機能ブロック(MEM, VXM, MXM, SXM)が示されている。
これらの機能ブロックは、1つのスーパーレーン(superlane)を構成している。
スーパーレーンは、TSPの基本的な処理単位であり、16個のレーンから成る。
図の下部には、ストリームレジスタ(SR0〜SR31)が示されている。
ストリームレジスタは、各機能ブロックの間に配置されており、データの受け渡しに使用される。
データは、MEM0またはMEM43から読み出され、ストリームレジスタを経由して、各機能ブロックに送られる。各機能ブロックは、ストリームレジスタからデータを受け取り、処理を行い、結果を別のストリームレジスタに書き込む。
例えば、MEM0からデータが読み出され、SR0を経由してVXMに送られる。
VXMは、データを処理し、結果をSR4に書き込む。
SR4のデータは、さらにMXMに送られ、処理された後、SR8に書き込まれる。
このように、TSPでは、ストリームレジスタを介してデータが各機能ブロック間を流れながら処理される。ストリームレジスタは、データの流れをスムーズにし、各機能ブロックが効率的に動作できるようにしている。
また、ストリームレジスタは、東向き(Eastward)と西向き(Westward)の2つの方向にデータを流すことができる。これにより、データの流れに柔軟性を持たせ、様々な処理に対応できるようになっている。
https://scrapbox.io/files/66270e82436aea0025bb2214.png
Figure 5は、TSPの実際のチップの写真と、その主要な構成要素を示している。
写真の中央には、TSPチップが写っている。
チップは縦長の長方形をしており、左右対称な構造になっている。
これは、チップが2つの半球(hemisphere)に分かれていることを表している。
チップの左右には、それぞれ44個のMEMブロックが縦に並んでいる。
MEMブロックは、チップ上のメモリを構成しており、データの保存と読み出しを担当している。
チップの中央には、左右に2つずつ、計4つのMXMブロックが配置されている。
MXMブロックは、行列演算を高速に行うための専用の回路。
MXMブロックの上下には、VXMブロックが配置されている。
VXMブロックは、ベクトル演算を行うための回路。
チップの上部と下部には、SXMブロックが配置されている。
SXMブロックは、データの入れ替えや転置を行うための回路。
チップの四隅には、C2Cと書かれたブロックがある。
C2Cは、チップ間通信を行うための回路。
これにより、複数のTSPチップを接続し、大規模なシステムを構築することができる。
また、チップの右上には、PCI GEN4と書かれた部分がある。
これは、TSPチップをコンピュータのPCIeバスに接続するためのインターフェイス。
この図から、TSPが如何にメモリと演算回路を緊密に統合し、効率的な処理を実現しているかが分かる。
💡よくわからないけど、すげー
https://scrapbox.io/files/66271038352e400024f47fa5.png
Figure 6は、TSPにおける命令の実行とデータの流れを説明している。
図の左側には、時間の経過を表す時刻t1, t2, t3, ...が示されている。
図の右側には、1つのスーパーレーンを構成する20個のタイルが縦に並んでおり、各タイルは、命令を実行するための回路を含んでいる。
図の中央には、データの流れを表す矢印が描かれている。
データは、1サイクルごとに1つのタイルを通過し、右方向に流れていく。
t1の時点では、最下部のタイルに命令が入力される。
この命令は、データの処理方法を指定するもの。
t2の時点では、命令が1つ上のタイルに伝わる。
同時に、最下部のタイルは、命令に従ってデータの処理を開始する。
t3の時点では、命令がさらに1つ上のタイルに伝わる。
また、最下部のタイルで処理されたデータが、1つ上のタイルに送られます。
このように、命令は下から上へ、データは左から右へと流れていく。
各タイルは、命令を受け取ると、それに従ってデータを処理し、処理結果を次のタイルに送る。
TSPでは、命令とデータが空間的に異なる方向に流れることで、パイプライン処理が実現されている。
これにより、複数の命令を同時に実行しながら、データを効率的に処理することができる。
また、この図から、TSPが非常に多くのデータを並列に処理できることが分かる。
1つのスーパーレーンには20個のタイルがあり、各タイルが同時にデータを処理している。
さらに、チップ上には複数のスーパーレーンが存在するため、TSP全体では膨大な量のデータを高速に処理できる。